home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / emulation / c64gfx / src / fflitoppm.c < prev    next >
C/C++ Source or Header  |  1999-05-14  |  11KB  |  314 lines

  1. /************************************************************************\
  2. * C64 Flickering FLI to Portable pixmap converter 14-Jun-92              *
  3. * By Pasi 'Albert' Ojala © 1991-1998                                     *
  4. *    albert@cs.tut.fi  albert@cc.tut.fi                                  *
  5. *                                                                        *
  6. * 26-Sep-92 Changed the palette a bit                                    *
  7. * 05-Sep-94 Totally revised RGB values for colors                        *
  8. * 17-Sep-94 Changed the file format a bit, load address $3bff/$3aff+'f'  *
  9. * 22-Jan-95 Outputting to stdout added                                   *
  10. *                                                                        *
  11. \************************************************************************/
  12.  
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17.  
  18. #define Y(r,g,b) ((30*r+59*g+11*b)/100)
  19.  
  20. #define UBYTE unsigned char
  21.  
  22. char *vers="\0$VER: FFLItoppm 1.1 (30.7.1998)\n";
  23.  
  24.  
  25. UBYTE gfxmem[8192];
  26. UBYTE chrmem1[8192], chrmem2[8192];
  27. UBYTE colmem[1024];
  28. UBYTE bgcol1[256], bgcol2[256];
  29.  
  30. #define COLORS 136
  31.  
  32. const UBYTE flashcol[COLORS+1][9] = {
  33. /* col0 col1   R   G   B     Y   U   V  flash */
  34.     { 0,  0,    0,  0,  0,    0,128,128,    0},
  35.     { 0,  1,  120,120,120,  120,128,128,  240},
  36.     { 1,  1,  240,240,240,  240,128,128,    0},
  37.     { 0,  2,  120,  0,  0,   36,116,181,   72},
  38.     { 1,  2,  240,120,120,  156,116,181,  168},
  39.     { 2,  2,  240,  0,  0,   72,103,235,    0},
  40.     { 0,  3,    0,120,120,   84,140, 75,  168},
  41.     { 1,  3,  120,240,240,  204,140, 75,   72},
  42.     { 2,  3,  120,120,120,  120,128,128,   96},
  43.     { 3,  3,    0,240,240,  168,153, 21,    0},
  44.     { 0,  4,  120,  0,120,   49,153,173,   98},
  45.     { 1,  4,  240,120,240,  169,153,173,  142},
  46.     { 2,  4,  240,  0,120,   85,140,227,   26},
  47.     { 3,  4,  120,120,240,  133,166,120,   70},
  48.     { 4,  4,  240,  0,240,   98,179,219,    0},
  49.     { 0,  5,    0,120,  0,   70,103, 84,  141},
  50.     { 1,  5,  120,240,120,  190,103, 84,   99},
  51.     { 2,  5,  120,120,  0,  106, 90,136,   69},
  52.     { 3,  5,    0,240,120,  154,116, 30,   27},
  53.     { 4,  5,  120,120,120,  120,128,128,   43},
  54.     { 5,  5,    0,240,  0,  141, 78, 38,    0},
  55.     { 0,  6,    0,  0,120,   13,166,120,   26},
  56.     { 1,  6,  120,120,240,  133,166,120,  214},
  57.     { 2,  6,  120,  0,120,   49,153,173,   46},
  58.     { 3,  6,    0,120,240,   97,179, 66,  142},
  59.     { 4,  6,  120,  0,240,   62,192,165,   72},
  60.     { 5,  6,    0,120,120,   84,140, 75,  115},
  61.     { 6,  6,    0,  0,240,   26,205,112,    0},
  62.     { 0,  7,  120,120,  0,  106, 90,136,  213},
  63.     { 1,  7,  240,240,120,  226, 90,136,   27},
  64.     { 2,  7,  240,120,  0,  142, 77,190,  141},
  65.     { 3,  7,  120,240,120,  190,103, 84,   45},
  66.     { 4,  7,  240,120,120,  156,116,181,  115},
  67.     { 5,  7,  120,240,  0,  177, 65, 92,   72},
  68.     { 6,  7,  120,120,120,  120,128,128,  187},
  69.     { 7,  7,  240,240,  0,  213, 52,145,    0},
  70.     { 0,  8,  120, 48,  0,   64,105,163,  128},
  71.     { 1,  8,  240,168,120,  184,105,163,  112},
  72.     { 2,  8,  240, 48,  0,  100, 92,217,   56},
  73.     { 3,  8,  120,168,120,  148,118,111,   40},
  74.     { 4,  8,  240, 48,120,  113,130,209,   30},
  75.     { 5,  8,  120,168,  0,  135, 80,119,   13},
  76.     { 6,  8,  120, 48,120,   77,143,155,  102},
  77.     { 7,  8,  240,168,  0,  171, 67,172,   85},
  78.     { 8,  8,  240, 96,  0,  128, 82,199,    0},
  79.     { 0,  9,   80, 32,  0,   42,113,152,   85},
  80.     { 1,  9,  200,152,120,  162,113,152,  155},
  81.     { 2,  9,  200, 32,  0,   78,100,206,   13},
  82.     { 3,  9,   80,152,120,  126,126, 99,   83},
  83.     { 4,  9,  200, 32,120,   92,138,197,   13},
  84.     { 5,  9,   80,152,  0,  113, 88,107,   56},
  85.     { 6,  9,   80, 32,120,   56,151,143,   59},
  86.     { 7,  9,  200,152,  0,  149, 75,160,  128},
  87.     { 8,  9,  200, 80,  0,  107, 90,187,   43},
  88.     { 9,  9,  160, 64,  0,   85, 98,176,    0},
  89.     { 0, 10,  120, 56, 56,   75,122,156,  150},
  90.     { 1, 10,  240,176,176,  195,122,156,   90},
  91.     { 2, 10,  240, 56, 56,  111,109,210,   78},
  92.     { 3, 10,  120,176,176,  159,134,103,   18},
  93.     { 4, 10,  240, 56,176,  124,146,202,   52},
  94.     { 5, 10,  120,176, 56,  146, 96,112,    9},
  95.     { 6, 10,  120, 56,176,   88,159,148,  124},
  96.     { 7, 10,  240,176, 56,  182, 83,165,   63},
  97.     { 8, 10,  240,104, 56,  139, 99,192,   22},
  98.     { 9, 10,  200, 88, 56,  118,106,180,   65},
  99.     {10, 10,  240,112,112,  150,115,185,    0},
  100.     { 0, 11,   40, 40, 40,   40,128,128,   80},
  101.     { 1, 11,  160,160,160,  160,128,128,  160},
  102.     { 2, 11,  160, 40, 40,   76,116,181,    8},
  103.     { 3, 11,   40,160,160,  124,140, 75,   88},
  104.     { 4, 11,  160, 40,160,   89,153,173,   18},
  105.     { 5, 11,   40,160, 40,  110,103, 84,   61},
  106.     { 6, 11,   40, 40,160,   53,166,120,   54},
  107.     { 7, 11,  160,160, 40,  146, 90,136,  133},
  108.     { 8, 11,  160, 88, 40,  104,105,163,   48},
  109.     { 9, 11,  120, 72, 40,   82,113,152,    5},
  110.     {10, 11,  160, 96, 96,  115,122,156,   70},
  111.     {11, 11,   80, 80, 80,   80,128,128,    0},
  112.     { 0, 12,   64, 64, 64,   64,128,128,  128},
  113.     { 1, 12,  184,184,184,  184,128,128,  112},
  114.     { 2, 12,  184, 64, 64,  100,116,181,   56},
  115.     { 3, 12,   64,184,184,  148,140, 75,   40},
  116.     { 4, 12,  184, 64,184,  113,153,173,   30},
  117.     { 5, 12,   64,184, 64,  134,103, 84,   13},
  118.     { 6, 12,   64, 64,184,   77,166,120,  102},
  119.     { 7, 12,  184,184, 64,  170, 90,136,   85},
  120.     { 8, 12,  184,112, 64,  128,105,163,    0},
  121.     { 9, 12,  144, 96, 64,  106,113,152,   43},
  122.     {10, 12,  184,120,120,  139,122,156,   22},
  123.     {11, 12,  104,104,104,  104,128,128,   48},
  124.     {12, 12,  128,128,128,  128,128,128,    0},
  125.     { 0, 13,   72,120, 72,  100,118,111,  200},
  126.     { 1, 13,  192,240,192,  220,118,111,   40},
  127.     { 2, 13,  192,120, 72,  136,105,163,  128},
  128.     { 3, 13,   72,240,192,  184,130, 57,   32},
  129.     { 4, 13,  192,120,192,  149,143,155,  102},
  130.     { 5, 13,   72,240, 72,  171, 93, 65,   59},
  131.     { 6, 13,   72,120,192,  113,156,102,  174},
  132.     { 7, 13,  192,240, 72,  207, 80,119,   13},
  133.     { 8, 13,  192,168, 72,  164, 95,145,   72},
  134.     { 9, 13,  152,152, 72,  143,103,133,  115},
  135.     {10, 13,  192,176,128,  175,112,138,   50},
  136.     {11, 13,  112,160,112,  140,118,111,  120},
  137.     {12, 13,  136,184,136,  164,118,111,   72},
  138.     {13, 13,  144,240,144,  200,108, 93,    0},
  139.     { 0, 14,   72, 72,120,   77,143,125,  154},
  140.     { 1, 14,  192,192,240,  197,143,125,   86},
  141.     { 2, 14,  192, 72,120,  113,130,178,   82},
  142.     { 3, 14,   72,192,240,  161,156, 71,   14},
  143.     { 4, 14,  192, 72,240,  126,169,170,   56},
  144.     { 5, 14,   72,192,120,  148,118, 80,   13},
  145.     { 6, 14,   72, 72,240,   90,182,117,  128},
  146.     { 7, 14,  192,192,120,  184,105,133,   59},
  147.     { 8, 14,  192,120,120,  141,121,160,   26},
  148.     { 9, 14,  152,104,120,  120,128,148,   69},
  149.     {10, 14,  192,128,176,  152,136,153,    4},
  150.     {11, 14,  112,112,160,  117,143,125,   74},
  151.     {12, 14,  136,136,184,  141,143,125,   26},
  152.     {13, 14,  144,192,192,  177,133,107,   46},
  153.     {14, 14,  144,144,240,  154,159,122,    0},
  154.     { 0, 15,   88, 88, 88,   88,128,128,  176},
  155.     { 1, 15,  208,208,208,  208,128,128,   64},
  156.     { 2, 15,  208, 88, 88,  124,116,181,  104},
  157.     { 3, 15,   88,208,208,  172,140, 75,    8},
  158.     { 4, 15,  208, 88,208,  137,153,173,   78},
  159.     { 5, 15,   88,208, 88,  158,103, 84,   35},
  160.     { 6, 15,   88, 88,208,  101,166,120,  150},
  161.     { 7, 15,  208,208, 88,  194, 90,136,   37},
  162.     { 8, 15,  208,136, 88,  152,105,163,   48},
  163.     { 9, 15,  168,120, 88,  130,113,152,   91},
  164.     {10, 15,  208,144,144,  163,122,156,   26},
  165.     {11, 15,  128,128,128,  128,128,128,   96},
  166.     {12, 15,  152,152,152,  152,128,128,   48},
  167.     {13, 15,  160,208,160,  188,118,111,   24},
  168.     {14, 15,  160,160,208,  165,143,125,   22},
  169.     {15, 15,  176,176,176,  176,128,128,    0},
  170.     {0,   0,    0,  0,  0,    0,  0,  0,    0} /* One extra for NOT_USED */
  171. };
  172.  
  173. /* Indices to the starts of each group (col1 changes) */
  174. const UBYTE fixedind[16] = {
  175.     0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120
  176. };
  177.  
  178.  
  179.  
  180. void Convert(char *name);
  181.  
  182. int main(int argc, char *argv[]) {
  183.     FILE *handle;
  184.     UBYTE temp[10];
  185.     int i;
  186.  
  187.     if (argc==2 || argc==3) {
  188.     if ((handle = fopen(argv[1],"rb"))) {
  189.         fread(temp, 2, 1